package com.huai.jt1078.codec;


import com.huai.jt1078.entity.MediaEncoding;

/**
 *
 * @author houcheng
 * @date 2019-12-11
 * 音频编码转码扩展实现：
 *      继承并实现AudioCodec类的抽象方法，完成任意音频到PCM编码的转码过程，并且补充AudioCodec.getCodec()工厂方法即可。
 *      （音频编码太多，也没那么多设备可以测试的，比较常见的就G.711A和ADPCMA这两种，本程序对于不支持的音频，将作 静音处理 ）
 *      音频编码	支持	备注
 *      G.711A	Y	支持
 *      G.711U	Y	支持
 *      ADPCMA	Y	支持
 *      G.726	Y	支持
 *
 * （音频编解码抽象父类）
 */
public abstract class AudioCodec {

    public abstract byte[] toPCM(byte[] data);

    public abstract byte[] fromPCM(byte[] data);

    public static AudioCodec getCodec(int encoding) {
        if (MediaEncoding.Encoding.ADPCMA.ordinal() == encoding) {
            return new ADPCMCodec();
        } else if (MediaEncoding.Encoding.G711A.ordinal() == encoding) {
            return new G711Codec();
        } else if (MediaEncoding.Encoding.G711U.ordinal() == encoding) {
            return new G711UCodec();
        } else if (MediaEncoding.Encoding.G726.ordinal() == encoding) {
            return new G726Codec();
        } else {
            return new SilenceCodec();
        }
    }
}
